package com.kehao.leetcode.middle.math;

import org.junit.Test;

public class PowXNSolution {
    /* 递归法
     */
//    private double powhelper(double x,long n){
//        if(n==1) return x;
//        if(n%2==1){
//            double half = powhelper(x, n / 2);
//            return half*half*x;
//        }else {
//            double half = powhelper(x, n / 2);
//            return half*half;
//        }
//    }
//
//    public double myPow(double x, int n) {
//        long longN = n;
//        if(n == 0 || x==1) return 1;
//        else if(n>0){
//            return powhelper(x,longN);
//        }else {
//            return 1/powhelper(x,-longN);
//        }
//    }

    /**迭代法
     *
     */
    private double powhelper(double x,long n){
        double answer =1;
        while (n>0){
            if(n%2==1){
                answer *= x;
            }

            x=x*x;
            n/=2;
        }
        return answer;
    }


    //主函数
    public double myPow(double x, int n) {
        long longN = n;
        if(n == 0 || x==1) return 1;
        else if(n>0){
            return powhelper(x,longN);
        }else {
            return 1/powhelper(x,-longN);
        }
    }


    @Test
    public void test01(){
        System.out.println(myPow(2, -2147483648));
        System.out.println(myPow(2, 10));
    }
}
